#ifndef WIN32FAKE_H
#define WIN32FAKE_H

#include "kernel.h"

#define MB_SYSTEMMODAL 0x1
#define MB_ICONERROR   0x2
#define MB_OK          0x4

extern void win32fake_init(void);


extern void MessageBox(void *ptr,char *message,char *windowTitle,int flags);
 /*void fatalbox(char *message);*/
extern int RegCreateKey(int section, char *keyName, HKEY *key);

#define GetStdHandle(fileHandle) fileHandle
/* kludges to allow use of stdin/stdout but OS handles everywhere else */
#define STD_INPUT_HANDLE (HANDLE) -1000
#define STD_OUTPUT_HANDLE (HANDLE) -1001
#define INVALID_HANDLE_VALUE -1
#define INVALID_HANDLE -1

/* junk values for SetConsoleMode - don't actually use them */
#define ENABLE_ECHO_INPUT 1
#define ENABLE_PROCESSED_INPUT 2
#define ENABLE_LINE_INPUT 3

#define GetConsoleMode(fileHandle, modePtr) *modePtr = 0
void SetConsoleMode(HANDLE f, int m);

/*#define WriteFile(fileHandle,string,stringLength,lengthPtr,dunno) \
          (*lengthPtr=fwrite(string,sizeof(char),stringLength,fileHandle))
#define ReadFile(fileHandle,buffer,bufferLength,lengthPtr,dunno) \
          (*lengthPtr=fread (buffer,sizeof(char),bufferLength,fileHandle))*/

int WriteFile(HANDLE fileHandle, char *string, int stringLength, DWORD *lengthPtr, void *dunno);
int ReadFile(HANDLE fileHandle, char *string, int stringLength, DWORD *lengthPtr, void *dunno);

#define GENERIC_READ 1
#define GENERIC_WRITE 2
#define FILE_SHARE_READ 0 /* no idea what this is */
#define OPEN_EXISTING 0x100
#define CREATE_ALWAYS 0

extern HANDLE CreateFile(char *name, int rw, int sharingDunno, void *dunno1,
                  int overwrite, int dunno2, int dunno3);

#define CloseHandle(f) _kernel_osfind(0x0, (char *) f)

/* Correspond to values from OS_File 5 */
#define FILE_ATTRIBUTE_DIRECTORY 2
#define FILE_ATTRIBUTE_NORMAL -1 /* what's this? */

extern DWORD GetFileAttributes(char *file);

#ifdef RISCOS_TIME
typedef struct
{
  unsigned int time[2];
} utcTime;
#else
#include <time.h>
typedef struct
{
  time_t tv_sec;
  unsigned long tv_usec;
} utcTime;
#endif

#define FILETIME utcTime

void GetFileTime(HANDLE file, void *dunno, FILETIME *accessTime, FILETIME *modifiedTime);

extern void time_riscos_to_posix(utcTime *utc, unsigned long *posix);
extern void time_posix_to_riscos(utcTime *utc, unsigned long *posix);

#define TIME_POSIX_TO_WIN(t, ft) time_posix_to_riscos(&ft,&t)
#define TIME_WIN_TO_POSIX(t, ft) time_riscos_to_posix(&t,&ft)

extern unsigned long GetFileSize(HANDLE file, void *dunno);

typedef struct
{
  char *cFileName; /* accessed externally */

  char *buffer;
  char dirName[1024];
  int  context;
} WIN32_FIND_DATA;

HANDLE FindFirstFile(char *buffer, WIN32_FIND_DATA *fdat);
int FindNextFile(HANDLE hand, WIN32_FIND_DATA *fdat);
#define FindClose(handle)

int CreateDirectory(char *name, void *dunno);

void SetFileTime(HANDLE f, void *dunno, utcTime *accessTime, utcTime *writeTime);

/* RISC OS calls - not based on Windows equivalents */
int canonicalise(char *result, char *input);
int GetFileType(HANDLE file, void *dunno);
void SetFileType(HANDLE file, int type);
int mimemaplookup(char *name);

#endif

